package com.setup.trac.controller;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import com.setup.trac.pojo.Profilo;
import com.setup.trac.pojo.Progetti;
import com.setup.trac.pojo.Utenti;
import com.setup.trac.pojo.condition.FinderProfiloById;
import com.setup.trac.pojo.condition.FinderProgettiByIds;
import com.setup.trac.pojo.wrappers.UtentiView;
import com.setup.trac.service.SearchService;
import com.setup.trac.util.SQLCondition;

public class AJAXAddProjectToUtenteController extends AbstractController {

	private SearchService searchService;

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String[] ids = request.getParameterValues("listaProgetti");
		boolean addAll = request.getParameter("addAll") != null
				&& request.getParameter("addAll").equalsIgnoreCase("true");
		if (!addAll) {
			if (ids != null) {
				
				SQLCondition sqlCondition = new FinderProgettiByIds(ids);
				Progetti[] progettiSelezionati = getSearchService().find(
						new Progetti[0], sqlCondition, Progetti.class);
				recordIdSelected(request, progettiSelezionati);
				request.setAttribute("progettiSelezionati", progettiSelezionati);
				ModelAndView mav = new ModelAndView("multiple-select");
				return mav;
			}
		} else {
			Progetti[] progettiSelezionati = getSearchService().find(
					new Progetti[0], Progetti.class);
			recordIdSelected(request, progettiSelezionati);
			request.setAttribute("progettiSelezionati", progettiSelezionati);
			ModelAndView mav = new ModelAndView("multiple-select");
			return mav;
		}
		response.getOutputStream().write("".getBytes());
		return null;
	}

	private void recordIdSelected(HttpServletRequest request,
			Progetti[] progettiSelezionati) {
		Map<String, String> mapIds = getIdsSelectedMap(request);
		if(mapIds == null){
			mapIds = new HashMap<String, String>();
		}
		for (int i = 0; i < progettiSelezionati.length; i++) {
			Progetti progetti = progettiSelezionati[i];
			mapIds.put(progetti.getIdProgetto().toPlainString(), progetti.getDescrizione());
		}
		request.getSession(false).setAttribute("IDS_PROGETTI_SELEZIONATI", mapIds);
	}

	private Map<String, String> getIdsSelectedMap(HttpServletRequest request) {
		Map<String, String> mapIds = (Map<String, String>) request.getSession(false).getAttribute("IDS_PROGETTI_SELEZIONATI");
		return mapIds;
	}

	public SearchService getSearchService() {
		return searchService;
	}

	public void setSearchService(SearchService searchService) {
		this.searchService = searchService;
	}

}

/*
 * List<String> progettiSelezionati = (List<String>) request.getSession(
 * false).getAttribute("progettiSelezionati"); if
 * ("true".equalsIgnoreCase(request.getParameter("checkprj"))) { boolean
 * allProjects=request.getParameter("allProjects")!=null &&
 * request.getParameter("allProjects").equals("1"); if (progettiSelezionati ==
 * null || progettiSelezionati.size() == 0 || !allProjects) { OutputStream out =
 * response.getOutputStream(); out.write("false".getBytes()); return null; } }
 * else { String idProgetto = request.getParameter("idProgetto"); boolean
 * checked = request.getParameter("checked").equals("true"); SQLCondition
 * sqlCondition = new FinderProfiloById((String) request
 * .getSession(false).getAttribute("idProfilo")); Profilo profilo =
 * getSearchService().find(new Profilo[0], sqlCondition, Profilo.class)[0]; if
 * (!checked && progettiSelezionati != null) {
 * progettiSelezionati.remove(idProgetto); } if
 * ("USER".equalsIgnoreCase(profilo.getDescrizione()) && (progettiSelezionati !=
 * null && progettiSelezionati .size() == 1)) { OutputStream out =
 * response.getOutputStream(); out.write("false".getBytes()); return null; } if
 * (progettiSelezionati == null) { progettiSelezionati = new
 * ArrayList<String>(); } if (!progettiSelezionati.contains(idProgetto) &&
 * checked) { progettiSelezionati.add(idProgetto); }
 * request.getSession(false).setAttribute("progettiSelezionati",
 * progettiSelezionati); }
 */